package someTestExcemple.huaweiOd.container.stack;

//华为OD机试 - 反转每对括号间的子串 - 栈（Java 2025 A卷 100分）
//https://blog.csdn.net/guorui_java/article/details/146973747

import java.util.Stack;
//todo  没看懂

public class InverseSubString {
    public static void main(String[] args) {
/*        // 创建Scanner对象用于读取控制台输入
        Scanner scanner = new Scanner(System.in);
        // 读取一行输入作为待处理的字符串
        String s = scanner.nextLine();
        // 调用函数处理字符串并输出结果
        String result = reverseParentheses(s);
        System.out.println(result);*/
        // 创建一个栈，栈中存储 StringBuilder 对象
        Stack<StringBuilder> stack = new Stack<>();
        // 向栈中添加一个 StringBuilder 对象
        stack.push(new StringBuilder("hello"));
        stack.push(new StringBuilder());
        stack.push(new StringBuilder("test"));
        // 创建一个 StringBuilder 对象
        StringBuilder sb = new StringBuilder("world");


        // 反转 sb 并追加到栈顶元素的末尾
        stack.peek().append(sb.reverse());

        // 输出栈顶元素
        stack.stream().forEach(System.out::println);
    }
    public static String reverseParentheses(String s) {
        // 创建栈用于处理括号
        Stack<StringBuilder> stack = new Stack<>();
        // 初始化一个空的StringBuilder用于存储结果
        stack.push(new StringBuilder());

        // 遍历输入字符串
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            if (c == '(') {
                // 遇到'('，压入一个新的空StringBuilder，表示开始处理新的一层括号
                stack.push(new StringBuilder());
            } else if (c == ')') {
                // 遇到')'，弹出栈顶StringBuilder，反转它，然后追加到新的栈顶
                // 这样就完成了当前层级括号内字符串的反转
                StringBuilder sb = stack.pop();
                  stack.peek().append(sb.reverse());
            } else {
                // 遇到普通字符，追加到栈顶StringBuilder
                stack.peek().append(c);
            }
        }

        // 返回最终结果
        return stack.pop().toString();
    }
}
//1、输入
//        (u(love)i)zz
//
//        2、输出
//        iloveuzz